<?php

//Возвращает массив с названиями фильмов (имена файлов)
function GetFilms()
{
   $films = `ls -p1 /home/data/downloads/`;
   $films = explode("\n",$films);
   $files = array();
   for($i=0;$i<count($films)-1;$i++)
   {
      if($films[$i][strlen($films[$i])-1] != '/') 
      {
        //Отсеиваем symlink'и
        if(!is_link("/home/data/downloads/".$films[$i]))  $files[] = $films[$i];
      }
   }
   return $files;
}

//Преобразование имени файла для безопасного переименования
function UnixAddSlashes($file)
{
   $symb = array(':','\'','ø','«','»','û','é'); //Ненужные символы
   for($i=0;$i<count($symb);$i++)
   {
      $file = str_replace($symb[$i],"",$file);
   }
   $file = str_replace('"','\"',$file);
   return('"'.$file.'"');
}

function UnixAddSlashes2($file)
{
   $symb = array(':','\'','ø','«','»','û','é'); //Ненужные символы
   for($i=0;$i<count($symb);$i++)
   {
      $file = str_replace($symb[$i],"",$file);
   }
   return($file);
}

//Класс для парсинга информации с КиноПоиск.ру
class KinoPoisk
{
   var $page=false;
   var $id;

   function __construct($id=0) { if($id) $this->id = $id; }

   //Получение страницы с информацией
   function GetPage($id=0)
   {
      if(!$id) $id = $this->id;
      //Получаем страницу
      $sock = fsockopen("www.kinopoisk.ru", 80, $errno, $errstr, 30);
      if ($sock)
      {
         $out = "GET /level/1/film/$id/ HTTP/1.1\n";
         $out .= "Host: www.kinopoisk.ru\n";
         $out .= "User-Agent: Mozilla/5.0 (X11; U; Linux i686 (x86_64); ru; rv:1.9.0.10) Gecko/2009042315 Firefox/3.5\n";
         $out .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\n";
         $out .= "Cookie: PHPSESSID=0345ff7bd826f5299251a935c6073581; path=/; domain=kinopoisk.ru\n";
         $out .= "Connection: Close\n\n";
         fwrite($sock, $out);
         $data = "";
         while (!feof($sock))
         {
            $data .= fgets($sock, 1024);
         }
         fclose($sock);
      }
      $this->id = $id;
      //Сохраняем страницу в переменной класса
      $this->page = $data;
   }

   //Получаем русское название фильма
   function RuName()
   {
      if($this->page)
      {
         $RuName = explode('<title>',$this->page);
         $RuName = explode('</title>',$RuName[1]);
         return iconv("CP1251","UTF8",$RuName[0]);
      }
      else return("Сначало необходимо получить страницу");
   }

   //Получаем оригинальное название фильма
   function EnName()
   {
      if($this->page)
      {
         $EnName = explode('<span style="color: #666; font-size: 13px">',$this->page);
         $EnName = explode('</span>',$EnName[1]);
         return $EnName[0];
      }
      else return("Сначало необходимо получить страницу");
   }

   //Год
   function Year()
   {
      if($this->page)
      {
         $Year = explode('<a href="/level/10/m_act%5Byear%5D/',$this->page);
         $Year = explode('/',$Year[1]);
         return $Year[0];
      }
      else return("Сначало необходимо получить страницу");
   }

   //Жанр
   function Genre()
   {
      if($this->page)
      {
         $Genre = explode('<a href="/level/10/m_act%5Bgenre%5D/',$this->page);
         $Genres = '';;
         for($i=1;$i<count($Genre);$i++)
         {
            $NGenre = explode('/',$Genre[$i]);
            if($i == (count($Genre)-1))
            {
               $Genres .= $NGenre[0];
            }
            else
            {
               $Genres .= $NGenre[0].",";
            }
         }
         return $Genres;
      }
      else return("Сначало необходимо получить страницу");
   }

   //Рейтинг Кинопоиск
   function kpRaiting()
   {
      if($this->page)
      {
	 if(!preg_match("/rating_stars/",$this->page)) return 0;
         $kpRaiting = explode('repeat-x; font-weight: normal !important; text-decoration: none">',$this->page);
         $kpRaiting = explode('<span',$kpRaiting[1]);
         return $kpRaiting[0];
      }
      else return("Сначало необходимо получить страницу");
   }

   //Рейтинг IMDB
   function imdbRaiting()
   {
      if($this->page)
      {
	 if(!preg_match("/rating_stars/",$this->page)) return 0;
         $imdbRaiting = explode('IMDB: ',$this->page);
         $imdbRaiting = explode(' (',$imdbRaiting[1]);
         return $imdbRaiting[0];
      }
      else return("Сначало необходимо получить страницу");
   }

   //Трейлер
   function Trailer()
   {
      return false;
      if($this->page)
      {
         $Trailer = explode('"kpPlayer",',$this->page);
         if(count($Trailer) == 1) return(NULL);
         $Trailer = explode('.flv:',$Trailer[1]);
         return trim(str_replace('"','',$Trailer[0]));
      }
      else return("Сначало необходимо получить страницу");
   }

   function Desc()
   {
      if($this->page)
      {
        $Desc = explode('<span class="_reachbanner_">',$this->page);
        if(count($Desc) == 1) return(NULL);
        $Desc = explode('</span>',$Desc[1]);
        return(iconv("CP1251","UTF8",trim($Desc[0])));
      }
      else return("Сначало необходимо получить страницу");
   }

   //Вы скорее всего ищите
   function Search($str,$year=false)
   {
      $sock = fsockopen("s.kinopoisk.ru", 80, $errno, $errstr, 30);
      if ($sock)
      {
         //Получаем страницу
         if($year) $out = "GET /index.php?level=7&from=forma&result=adv&m_act%5Bfrom%5D=forma&m_act%5Bwhat%5D=content&m_act%5Bfind%5D=".str_replace(" ","+",$str)."&m_act%5Byear%5D=".$year." HTTP/1.1\n";
         else $out = "GET /index.php?kp_query=".str_replace(" ","+",$str)." HTTP/1.1\n";
         $out .= "Host: s.kinopoisk.ru\n";
         $out .= "User-Agent: Mozilla/5.0 (X11; U; Linux i686 (x86_64); ru; rv:1.9.0.10) Gecko/2009042315 Firefox/3.0.10 GTB5\n";
         $out .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\n";
         $out .= "Connection: Close\n\n";
         fwrite($sock, $out);
         $data = "";
         while (!feof($sock))
         {
            $data .= fgets($sock, 1024);
         }
         fclose($sock);
      }
      if(preg_match("/<title>Результаты поиска/u",$data))
      {
	if(preg_match("/(\d*)\/sr\/1/",$data,$matches)) return $matches[1];
	else return false;
      } 
      else if(preg_match("/\/level\/1\/film\/(\d*)/",$data,$matches)) return $matches[1];
      else return false; 
   }

   //Идентификация фильма
   //Название с rutracker.org
   function Identify($str)
   {
      preg_match("/(.*)\/(.*)\(.*\[(\d{4})/u",$str,$matches);
      $ex = explode("/",$matches[1]);
      if(count($ex) > 0) $matches[1] = $ex[0];
      for($i=0;$i<count($matches);$i++) $matches[$i] = trim($matches[$i]);
      $id = $this->Search($matches[1],$matches[3]);
      if($this->Search($matches[2],$matches[3]) == $id) return $id;
      else return false;
   }
   
   //Картинка
   function Image()
   {
      $sock = fsockopen("www.kinopoisk.ru", 80, $errno, $errstr, 30);
      if ($sock)
      {
        $out = "GET /images/film/".$this->id.".jpg HTTP/1.1\n";
        $out .= "Host: st.kinopoisk.ru\n";
        $out .= "User-Agent: Mozilla/5.0 (X11; U; Linux i686 (x86_64); ru; rv:1.9.0.10) Gecko/2009042315 Firefox/3.0.10 GTB5\n";
        $out .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\n";
        $out .= "Connection: Close\n";
        $out .= "Referer: http://www.kinopoisk.ru/level/1/film/".$this->id."/\n\n";
        fwrite($sock, $out);
        $data = "";
        while (!feof($sock))
        {
          $data .= fgets($sock, 1024);
        }
        fclose($sock);
        $data = explode("\r\n\r\n",$data,2);
        return($data[1]);
     }
  }
};

//Транслитерация
function encodestring($string)
  {
    $table = array(
                'А' => 'A',
                'Б' => 'B',
                'В' => 'V',
                'Г' => 'G',
                'Д' => 'D',
                'Е' => 'E',
                'Ё' => 'YO',
                'Ж' => 'ZH',
                'З' => 'Z',
                'И' => 'I',
                'Й' => 'J',
                'К' => 'K',
                'Л' => 'L',
                'М' => 'M',
                'Н' => 'N',
                'О' => 'O',
                'П' => 'P',
                'Р' => 'R',
                'С' => 'S',
                'Т' => 'T',
                'У' => 'U',
                'Ф' => 'F',
                'Х' => 'H',
                'Ц' => 'C',
                'Ч' => 'CH',
                'Ш' => 'SH',
                'Щ' => 'CSH',
                'Ь' => '',
                'Ы' => 'Y',
                'Ъ' => '',
                'Э' => 'E',
                'Ю' => 'YU',
                'Я' => 'YA',

                'а' => 'a',
                'б' => 'b',
                'в' => 'v',
                'г' => 'g',
                'д' => 'd',
                'е' => 'e',
                'ё' => 'yo',
                'ж' => 'zh',
                'з' => 'z',
                'и' => 'i',
                'й' => 'j',
                'к' => 'k',
                'л' => 'l',
                'м' => 'm',
                'н' => 'n',
                'о' => 'o',
                'п' => 'p',
                'р' => 'r',
                'с' => 's',
                'т' => 't',
                'у' => 'u',
                'ф' => 'f',
                'х' => 'h',
                'ц' => 'c',
                'ч' => 'ch',
                'ш' => 'sh',
                'щ' => 'csh',
                'ь' => '',
                'ы' => 'y',
                'ъ' => '',
                'э' => 'e',
                'ю' => 'yu',
                'я' => 'ya',
    );

    $output = str_replace(
        array_keys($table),
        array_values($table),$string
    );

    return $output;
}

function isLocal($addr)
{
   $mask = array('192.168.','10.');
   for($i=0;$i<count($mask);$i++)
     if( count(explode($mask[$i],$addr)) > 1 ) return true;
   return false;
}

function GenPass($number)
{
   $arr = array('a','b','c','d','e','f',
                'g','h','i','j','k','l',
                'm','n','o','p','r','s',
                't','u','v','x','y','z',
                'A','B','C','D','E','F',
                'G','H','I','J','K','L',
                'M','N','O','P','R','S',
                'T','U','V','X','Y','Z',
                '1','2','3','4','5','6',
                '7','8','9','0');

   //Генерируем пароль
   $pass = "";
   for($i = 0; $i < $number; $i++)
   {
      //Вычисляем случайный индекс массива
      $index = rand(0, count($arr) - 1);
      $pass .= $arr[$index];
   }
   return $pass;
}

?>
